{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using the C12 emulator\n",
"C12 Callisto is software that emulates our real quantum machine in development.\n",
"It is made on top of the Qiskit library with a proprietary noise model corresponding to our system and with the physical parameters of real devices.\n",
"This offers realistic noisy simulations of runs on real devices.\n",
"All the errors that occur during the execution of a quantum circuit have been modelled in the emulator.\n",
"\n",
"Quantum errors are due to decoherence channels.\n",
"This first version includes decoherence from charge noise, from phonon noise and from relaxation of the qubit through its quantum bus, a microwave resonator.\n",
"Callisto offers additional features like mid-circuit measurement and noisy initialization.\n",
"The quantum gate set of the current configuration is $R_X$, $R_Y$ and $R_Z$ for the 1Q gates and ISWAP for the 2Q gate.\n",
"Any other gate will be transpiled into this basis gate set.\n",
"\n",
"Callisto's physical parameters are based on the first quantum chip that C12 will fabricate & release.\n",
"For the moment, we offer one fixed configuration of the C12 emulator.\n",
"The chosen configuration leads to the following fidelities.\n",
"\n",
"### Running a quantum circuit\n",
"To run the circuits on the C12 emulator, first, it is mandatory to obtain the authentication token that will be used for connection to the remote server where our emulator is. So don't hesitate to contact the system administrator to get one.\n",
"\n",
"A token is set via UserConfig class, as shown in the example bellow. UserConfig class has other properties, like more detailed out, which can be set by setting the parameter \"verbose\" to True. One important remark is that the object of the `UserConfig` class is passed to the provider instance, so for any change to take effect one has to reinitialize the provider.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As mentioned in the first tutorial, the provided class contains information about available backends that can be used for running the circuit. Furthermore, the available ones can be viewed using the `backends()` method of the provider class (recall that this applies to every Qiskit's provider class, as its sole purpose is to provide access to backends).\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-08T15:01:21.086801Z",
"start_time": "2024-10-08T15:01:19.396732Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Backend data {'backend_name': 'c12sim', 'local': False, 'simulator': True, 'basis_gates': ['crx', 'rx', 'ry', 'rz'], 'description': 'C12 simulator', 'n_qubits': 13, 'conditional': False, 'max_shots': 100000, 'memory': False, 'open_pulse': False, 'max-circuits': 10}\n"
]
}
],
"source": [
"# UserConfig class\n",
"from c12_callisto_clients.user_configs import UserConfigs\n",
"import os\n",
"user_auth_token = os.getenv(\"C12_TOKEN\")\n",
"configs = UserConfigs.parse_obj({\"token\" : user_auth_token})\n",
"\n",
"from c12_callisto_clients.qiskit.c12sim_provider import C12SimProvider\n",
"c12_simulator_provider = C12SimProvider(configs)\n",
"c12_backends = c12_simulator_provider.backends()\n",
"\n",
"\n",
"print(f\"Backend data {c12_backends[0]}\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have to call the `get_backend()` function to get the instance of a chosen backend. To the `get_backend()` function, we pass the name of the desired backend we need to obtain."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-08T15:01:33.686673Z",
"start_time": "2024-10-08T15:01:33.517399Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"c12_simulator_backend_iswap = c12_simulator_provider.get_backend('c12sim-iswap') # Basis gate set with iSWAP gate\n",
"print(c12_simulator_backend_iswap)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we will run a quantum circuit on the C12 simulator. We will create one circuit using the Qiskit QuantumCircuit class to do that. Then, using the obtained C12 simulator backend class, we will run the circuit using the `run()` method.\n",
"\n",
"Method `run()` can have an additional parameter, such as the number of shots (number of times the simulation is run).\n",
"Also, recall that after calling the `run()` method, we get an instance of a Job class.\n",
"Additionally, it could take some time for the simulation to finish. Usually, the time is less than one minute, but it depends on the circuit and the server load at that moment.\n",
"\n",
"Furthermore, in the sixth notebook it is shown that we can pass physical parameters to the `run()` method in order to run the simulation with different physical system."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-08T15:02:38.905682Z",
"start_time": "2024-10-08T15:01:40.808053Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"C12 simulation counts (iSWAP): {'00': 5040, '01': 11, '10': 10, '11': 4939}\n"
]
}
],
"source": [
"from qiskit import QuantumCircuit\n",
"\n",
"circuit = QuantumCircuit(2)\n",
"circuit.h(0)\n",
"circuit.cx(0, 1)\n",
"\n",
"c12_job_iswap = c12_simulator_backend_iswap.run(circuit, shots=10000)\n",
"c12_result_iswap = c12_job_iswap.result()\n",
"c12_counts_iswap = c12_result_iswap.get_counts()\n",
"print(f\"C12 simulation counts (iSWAP): {c12_counts_iswap}\")"
]
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-07T13:29:10.112775Z",
"start_time": "2024-10-07T13:29:10.037402Z"
}
},
"outputs": [],
"source": [
"# We will also run the same circuit on the Aer statevector simulator to obtain the perfect results.\n",
"from qiskit_aer import AerSimulator\n",
"\n",
"circuit.measure_all()\n",
"backend_aer = AerSimulator()\n",
"result_aer = backend_aer.run(circuit, shots=10000).result()\n",
"counts_aer = result_aer.get_counts()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-07T13:29:14.462613Z",
"start_time": "2024-10-07T13:29:13.962568Z"
}
},
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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6t/f31+BgYHmNqxdu7b8/f01ffp0u+26ZMkS7dmz565sCwDIDq4xxANryZIl5ujZ9erXr5/hWrTs6t69u3r27KnWrVvrscce044dO7Rs2TIVKlTohu8LDg5W2bJlNWjQIB07dkze3t76+uuvM72GLDQ0VJL00ksvKSIiQlarVc8995yeeOIJhYeH64033tDhw4dVvXp1LV++XN9995369++vsmXL3lL9586dU6NGjVS8eHH9+eefmjx5smrUqGFeq5iZ8PBwPf/88/rwww/1xx9/qFmzZkpLS9P69esVHh6uvn37qnr16urcubM+/vhjnT9/Xo8++qi2bt2qzz//XE8++aTCw8NvWt/tcHd319KlS9W5c2fVrVtXS5Ys0eLFi/X666+b1+tFRkZq/Pjxatasmdq3b69Tp05p6tSpKleunH799ddsLffChQsqXry42rRpo+rVq8vLy0srV67Utm3bNG7cOEmSi4uL3n//fUVFRenRRx9Vu3btzMfVBAUFacCAATm2HQDgjjjqdmjgbrnR42okGdHR0YZh/O9xNWPHjrV7f/qjZebPn5/pfLdt22a2paamGkOGDDEKFSpkeHp6GhEREcb+/ftv6XE1u3fvNpo0aWJ4eXkZhQoVMnr06GHs2LHDrkbDMIyUlBSjX79+RuHChQ2LxWL36JoLFy4YAwYMMAIDAw0XFxejfPnyxtixY81HxqSTlOnjVBYsWGA0bdrU8Pf3N1xdXY2SJUsaL774onHixImbbueUlBRj7NixRnBwsOHq6moULlzYaN68ubF9+3azT3JysjFy5EijdOnShouLi1GiRAlj6NChdo/8MYxrj6uJjIzMsIzM6s5sv3Xu3NnIly+fceDAAaNp06aGp6enUaRIEWP48OFGamqq3fs//fRTo3z58oabm5sRHBxsREdHG8OHD8/wSKCstln6tPTH1SQmJhqDBw82qlevbuTPn9/Ily+fUb16dWPatGkZ3vfVV18ZNWvWNNzc3IyCBQsaHTp0MP766y+7Punr8k+Z1QgAOc1iGNm4ghsAcpEuXbpowYIFunjxoqNLAYD7GtcYAgAAQBLBEAAAADYEQwAAAEiSuMYQAAAAkhgxBAAAgA3BEAAAAJJ4wHW2paWl6fjx48qfP/8tfxcsAODBYxiGLly4oMDAQDk52Y+3pKamKjk52UGVAde4uLjc8new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7dixQxaLRRaLRbNmzcpynW60nMOHD8tisWjevHl65JFH5OHhoYceeki///67tm3bptq1a8vLy0vNmzfX6dOnzfc1bNhQ/fv3t1vOk08+qS5dumRZx/jx41W1alXly5dPJUqUUO/evXXx4kVJ0tq1axUVFaX4+HhznUaMGCFJ+vvvv9WpUycVKFBAnp6eat68uf74448bbvcjR45kWcfNMGIIAAAy5eHhobNnz0qS+vbtq927d2vu3LkKDAzUt99+q2bNmmnnzp0qX768JOny5ct6//33NXPmTPn5+alo0aJq2LChoqKidOLECXO+s2fP1rBhwzRlyhTVrFlTv/zyi3r06KF8+fKpc+fOunjxoh599FEVK1ZM33//vQICAvTzzz8rLS1Nzz77rHbt2qWlS5dq5cqVkiQfn8xP099sOemGDx+uiRMnqmTJkuratavat2+v/Pnza9KkSfL09NQzzzyjYcOG6aOPPsr2tnRyctKHH36o0qVL6+DBg+rdu7deffVVTZs2TfXr19fEiRM1bNgw7du3T5Lk5eUl6dop/j/++EPff/+9vL29NWTIELVo0UK7d++Wi4tLptvd398/23USDAEAgB3DMLRq1SotW7ZM/fr105EjRxQdHa0jR44oMDBQkjRo0CAtXbpU0dHRevfddyVJycnJmjZtmqpXr27Oy9fXV5IUEBBgtg0fPlzjxo3T008/LUkqXbq0du/erRkzZqhz586aM2eOTp8+rW3btqlgwYKSpHLlypnv9/LykrOzs908M3Oz5aQbNGiQIiIiJEkvv/yy2rVrp1WrVunhhx+WJHXr1u2Go5K34voRxqCgIL399tvq2bOnpk2bJldXV/n4+MhisditU3og3LBhg+rXry/pWtgtUaKEFi5cqLZt20rKfLtnF8EQAABIkhYtWiQvLy8lJycrLS1N7du314gRI7R27VqlpqaqQoUKdv0TExPl5+dnvnZ1dVW1atVuuIxLly7pwIED6tatm3r06GG2p6SkmCN/sbGxqlmzphkKs+NWlpPu+pqLFCkiSapatapd26lTp7JdiyStXLlSo0eP1t69e5WQkKCUlBRdvXpVly9flqenZ6bv2bNnj5ydnVW3bl2zzc/PTxUrVtSePXvMtlvZ7reKYAgAACRJ4eHh+uijj+Tq6qrAwEDzbuSLFy/KarVq+/btslqtdu9JP+Up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"
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Make comparison\n",
"from qiskit.visualization import plot_histogram\n",
"iswap = {}\n",
"for key, value in c12_counts_iswap.items():\n",
" iswap[key.strip()] = value\n",
"data = [iswap, counts_aer]\n",
"plot_histogram(data,\n",
" legend=['C12 emulator', 'Perfect emulator'],\n",
" title=\"Emulators comparison\",\n",
" figsize=(5, 5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Grover algorithm example\n",
"\n",
"The Grover algorithm, also known as Grover's search algorithm, is a quantum algorithm that can be used to search an unsorted database or find a specific database entry faster than classical algorithms. It is one of the earliest quantum algorithms.\n",
"\n",
"The algorithm works by starting with a superposition of all possible states and then applying a series of operations to amplify the amplitude of the state corresponding to the desired item. As a result, the algorithm achieves a quadratic speedup over classical algorithms, which means that it can search a database of N items in O($\\sqrt{N}$) time, compared to O(N) time for classical algorithms.\n",
"\n",
"First, we will create an groover circuit with a two qubits."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-07T13:29:36.676362Z",
"start_time": "2024-10-07T13:29:36.587996Z"
}
},
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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"
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from qiskit import QuantumRegister\n",
"\n",
"qreg_q = QuantumRegister(2, 'q')\n",
"groover_circuit = QuantumCircuit(qreg_q)\n",
"\n",
"groover_circuit.h(qreg_q[1])\n",
"groover_circuit.h(qreg_q[0])\n",
"groover_circuit.x(qreg_q[1])\n",
"groover_circuit.x(qreg_q[0])\n",
"groover_circuit.cz(qreg_q[0], qreg_q[1])\n",
"groover_circuit.x(qreg_q[0])\n",
"groover_circuit.x(qreg_q[1])\n",
"groover_circuit.h(qreg_q[0])\n",
"groover_circuit.h(qreg_q[1])\n",
"groover_circuit.z(qreg_q[0])\n",
"groover_circuit.z(qreg_q[1])\n",
"groover_circuit.cz(qreg_q[0], qreg_q[1])\n",
"groover_circuit.h(qreg_q[0])\n",
"groover_circuit.h(qreg_q[1])\n",
"groover_circuit.measure_all()\n",
"groover_circuit.draw('mpl')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2024-10-07T13:30:52.580083Z",
"start_time": "2024-10-07T13:29:38.076932Z"
}
},
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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RCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJKVy/Do4uICmUym8S8kJAQA0KpVK43Hhg8frvYaN27cQFBQEIyMjGBra4vx48cjLy9Prc++fftQr1496Ovro2rVqoiKinpfQyQiIiIqk3S0XUBJHD9+HPn5+eLX58+fxyeffILu3buLbUOHDsWMGTPEr42MjMT/z8/PR1BQEOzt7XH48GHcvXsX/fv3h66uLr799lsAQHJyMoKCgjB8+HCsW7cO8fHxGDJkCBwcHBAYGPgeRklERERU9pTL8GhjY6P29XfffQc3Nze0bNlSbDMyMoK9vX2Bz4+NjcXFixexe/du2NnZwdvbGzNnzsTEiRMRFhYGPT09rFq1Cq6urpg/fz4AoHr16jh48CAWLlzI8EhEREQfrXIZHl+Vk5ODX3/9FWPGjIFMJhPb161bh19//RX29vbo2LEjpk6dKs4+JiQkoFatWrCzsxP7BwYGYsSIEbhw4QLq1q2LhIQE+Pv7q20rMDAQoaGhhdaSnZ2N7Oxs8evMzEwAQG5uLnJzcwEAcrkcCoUC+fn5UCqVYl9Ve15eHgRBENsVCgXk8nK5uuC9EARBY7mBrq4ulEql2uy0TCaDjo5Ooe2FHY/iHqfC2lXHX0VH5+W33uu1F9bOMXFMHFP5HtOrfYjKu3IfHrds2YL09HQMHDhQbOvduzecnZ3h6OiIs2fPYuLEiUhKSsKff/4JAEhNTVULjgDEr1NTU4vsk5mZiefPn8PQ0FCjljlz5iA8PFyjPTY2VgyuTk5OqFu3Ls6ePYsbN26IfTw8PODp6Yljx47h/v37Yru3tzecnZ2Ls0s+Kk+ePMHevXvFr3V0dBAUFIQHDx4gISFBbDc1NUXr1q1x8+ZNJCYmiu02NjZo2rQprly5gqSkJLG9pMfpwIEDePLkidju4+MDW1tbxMbGqv0C8/Pzg6GhIWJiYtTG0759ezx//pxj4pg4pg9sTG5ubiD6UMiEV/80KocCAwOhp6eHv//+u9A+e/bsQZs2bXD16lW4ublh2LBhuH79Onbt2iX2ycrKgrGxMWJiYtCuXTtUq1YNwcHBmDx5stgnJiYGQUFByMrKKjA8FjTzWLlyZTx48ABmZmYASv4XuMuk7SXbQe9AikFvbZcgEqanl4lZhQ9xpoRj4pg4ptIb07Nnz2BpaYmMjAzx9wFReVWuZx6vX7+O3bt3izOKhWncuDEAiOHR3t4ex44dU+uTlpYGAOI6SXt7e7Ht1T5mZmYFBkcA0NfXh76+vka7rq4udHV11doUCgUUCoVGX9UPO5JGJpNp7Fvg5Q/wgk73F9Ze2PEo7nEqrL2gGovbzjFxTADHVFiNxW1/32Pi8iP6kJTrd3NkZCRsbW0RFBRUZD/VKQgHBwcAL099nDt3Dvfu3RP7xMXFwczMDF5eXmKf+Ph4tdeJi4uDj49PKY6AiIiIqHwpt+FRqVQiMjISAwYMUPsL79q1a5g5cyZOnjyJlJQUbN26Ff3794evry9q164NAAgICICXlxf69euHM2fOYNeuXZgyZQpCQkLEmcPhw4fj33//xYQJE3D58mWsWLECGzduxOjRo7UyXiIiIqKyoNyGx927d+PGjRsYNGiQWruenh52796NgIAAeHp6YuzYsejatavamkiFQoFt27ZBoVDAx8cHffv2Rf/+/dXuC+nq6ort27cjLi4OderUwfz587FmzRrepoeIiIg+auX+gpmyLDMzE+bm5qWyQJoXzBQiLEPbFRARvVFp/j4g0rZyO/NIRERERO8fwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERSVbi8HjgwAHcuHGjyD43b97EgQMHSroJIiIiIipjShwe/fz8EBUVVWSfX375BX5+fiXdBBERERGVMSUOj4IgvLGPUqmETCYr6SaIiIiIqIx5p2ser1y5AnNz83e5CSIiIiJ6j3SK03nQoEFqX2/ZsgUpKSka/fLz88X1ju3atXurAomIiIio7ChWeHx1jaNMJkNiYiISExML7CuTydCwYUMsXLjwbeojIiIiojKkWOExOTkZwMv1jlWqVEFoaChGjRql0U+hUMDS0hLGxsalUyURERERlQnFCo/Ozs7i/0dGRqJu3bpqbURERET0YStWeHzVgAEDSrMOIiIiIioHShweVY4dO4bjx48jPT0d+fn5Go/LZDJMnTr1bTdDRERERGVAicPjo0eP0LlzZxw6dKjIez4yPBIRERF9OEocHseMGYODBw+iVatWGDBgACpVqgQdnbeeyCQiIiKiMqzEaW/btm1o1KgR4uPj+SkyRERERB+JEn/CzPPnz+Hr68vgSERERPQRKXF49Pb2LvDTZYiIiIjow1Xi8Dh9+nRs3boVR44cKc16iIiIiKgMK/Gax9TUVAQFBaFly5bo06cP6tWrBzMzswL79u/fv8QFEhEREVHZIROKus9OEeRyOWQymdptel5f/ygIAmQyWYH3f/wYZGZmwtzcHBkZGYUGa6lcJm0vpareXopBb22X8D9hGdqugIjojUrz9wGRtpV45jEyMrI06yAiIiKicoAfT0hEREREkpX4ghkiIiIi+viUeObxxo0bkvs6OTmVdDNEREREVIaUODy6uLhIukG4TCZDXl5eSTdDRERERGVIicNj//79CwyPGRkZOHPmDJKTk9GyZUu4uLi8TX1EREREVIaUODxGRUUV+pggCJg/fz4iIiLw008/lXQTRERERFTGvJMLZmQyGcaNG4caNWpg/Pjx72ITRERERKQF7/Rq6wYNGmDPnj3vchNERERE9B690/B47do1XixDRERE9AEp8ZrHwiiVSty+fRtRUVH466+/0KZNm9LeBBERERFpSYnDo+qzrQsjCAIsLS0xf/78km6CiIiIiMqYEodHX1/fAsOjXC6HpaUlGjZsiODgYNja2r5VgURERERUdpQ4PO7bt68UyyAiIiKi8oCfbU1EREREkpXKBTOHDh1CYmIiMjMzYWZmBm9vbzRr1qw0XpqIiIiIypC3Co+HDx9GcHAwrl69CuDlRTKqdZDu7u6IjIyEj4/P21dJRERERGVCicPjhQsXEBAQgKysLHzyySfw8/ODg4MDUlNTsXfvXsTGxiIwMBBHjhyBl5dXadZMRERERFpS4vA4Y8YM5OTkICYmBm3btlV7bOLEidi5cyc6deqEGTNmYP369W9dKBERERFpX4kvmNm3bx+6deumERxV2rZti27dumHv3r0lLo6IiIiIypYSh8eMjAy4uroW2cfV1RUZGRkl3QQRERERlTElDo+Ojo44cuRIkX2OHj0KR0fHkm6iQGFhYZDJZGr/PD09xcdfvHiBkJAQWFtbw8TEBF27dkVaWpraa9y4cQNBQUEwMjKCra0txo8fr/EZ3Pv27UO9evWgr6+PqlWrIioqqlTHQURERFQelTg8durUCfv27cPUqVPx4sULtcdevHiB6dOnY+/evfj000/fusjX1ahRA3fv3hX/HTx4UHxs9OjR+Pvvv7Fp0ybs378fd+7cwWeffSY+np+fj6CgIOTk5ODw4cNYu3YtoqKiMG3aNLFPcnIygoKC4Ofnh8TERISGhmLIkCHYtWtXqY+FiIiIqDyRCYIglOSJDx8+ROPGjZGcnAxra2s0atQIdnZ2SEtLw/Hjx3H//n1UqVIFx44dg5WVVakVHBYWhi1btiAxMVHjsYyMDNjY2CA6OhrdunUDAFy+fBnVq1dHQkICmjRpgh07dqBDhw64c+cO7OzsAACrVq3CxIkTcf/+fejp6WHixInYvn07zp8/L752z549kZ6ejp07d0quNTMzE+bm5sjIyICZmdlbjdtl0va3en5pSjHore0S/ieMyyKIqOwrzd8HRNpW4qutra2tceTIEUyY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RERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EREREJBnDIxERERFJxvBIRERERJIxPBIRERGRZAyPRERERCQZwyMRERERScbwSERERESSMTwSERERkWQMj0REREQkGcMjEREREUnG8EhEREREkjE8EhEREZFkDI9EWrB06VLY2dlBoVBAJpNh8uTJao9PmDAB1tbWkMvlkMlk2LBhg5Yq/Xi96RjJZLIC/wUFBWmp4o/Tm44TAGzbtg329vbiMTI2NkZCQoIWqiX6MDA8EmnB48eP4e7ujnHjxhX4eGZmJurUqYN+/fq958pI5U3H6MyZM2r/goODAQDjx49/n2V+9N50nPbs2YNOnTrByckJ0dHRiI+PR2hoKMzMzN5zpUQfDpkgCIK2i/hQZWZmwtzcHBkZGW/9g8pl0vZSqurtpRj01nYJ/xOWoe0K3ppMJsOkSZMwZ84cjccOHjyIFi1aYP369ejRo4cWqiOg6GOk4uDggOzsbDx69Og9VkavKug4OTk5QUdHB//++68WKyvd3wdE2saZRyKit3T+/HmkpqaiV69e2i6FXpGXl4ebN2/C1dUVFSpUgFwuh4mJSYGntolIOoZHIqK3NGHCBMhkMsyePVvbpdArLl68CODlqevmzZvjt99+Q/PmzfHdd99h8eLFWq6OqPxieCQiekvx8fGoWbMmLCwstF0KvSIvLw8A4OzsjC1btqBHjx7YuXMn7OzssGDBAi1XR1R+MTwSEb2FZcuWIScnB1OmTNF2KfSaatWqAQCqVq2q1u7s7IzHjx9roySiDwLDIxHRW1i0aBGMjIzw+eefa7sUeo2JiQlMTEw0Lpa5efMmrKystFQVUfmno+0CiD5Gqamp2L9/v/j1pUuXsGHDBjg5OcHHxwfXrl3DiRMncPnyZQDA4cOHAQDVq1dH7dq1tVLzx+ZNxwgAbt26hWvXrvFCGS1603H64osvEBERgf79+2PAgAFYtWoV7t69i+XLl2uxaqLyjbfqkWD58uWYN28eUlNTUadOHSxduhSNGjV64/N4q573oJzeqmfRokUYPXq0RrubmxuuXr2KIUOG4KefftJ4vGXLlti3b997qJDedIwAoG/fvli3bh2uX78OJyen910iQdpxCg4Oxrp165CbmwsDAwOMHj0a33777Xutk7fqoQ8Jw+MbbNiwAf3798eqVavQuHFjLFq0CJs2bUJSUhJsbW2LfC7D43tQTsMjEX1cGB7pQ8I1j2+wYMECDB06FMHBwfDy8sKqVatgZGSEn3/+WdulEREREb13XPNYhJycHJw8eVLthrJyuRz+/v4Ffi5qdnY2srOzxa8zMl7Oij169Ai5ubni8xUKBfLz86FUKtVeV6FQIC8vD69OBisUCsjlciizs0p9fCWVKSs7k9VCRoZ4Ow4VXV1dKJVK5Ofni20ymQw6OjqFthd2PIpznGqHx72LIZbYmWn+bz0muVxeaLvqPa2io/Pyx8nrx6Owdh4n4Hx4YKmMicfp3SqN4/Ts2TMAAE/20YeA4bEIDx48QH5+Puzs7NTa7ezsxAsZXjVnzhyEh4drtLu6ur6zGrXBXNsFvOo7C21XUGZZLdJ2BfQm5ou0XQFJUZrH6cmTJzA3L1M/RYmKjeGxFE2ePBljxowRv1YqlXj06BGsra0hk8m0WFnpyczMROXKlXHz5k2u2ynDeJzKPh6j8qG0jpMgCHjy5AkcHR1LsToi7WB4LEKFChWgUCiQlpam1p6WlgZ7e3uN/vr6+tDX11dr+1A/ccLMzIy/8MoBHqeyj8eofCiN48QZR/pQ8IKZIujp6aF+/fqIj48X25RKJeLj48X7vBERERF9TDjz+AZjxozBgAED0KBBAzRq1AiLFi3Cs2fPEBwcrO3SiIiIiN47hsc36NGjB+7fv49p06YhNTUV3t7e2Llzp8ZFNB8LfX19TJ8+XeP0PJUtPE5lH49R+cDjRKSJNwknIiIiIsm45pGIiIiIJGN4JCIiIiLJGB6JiIiISDKGRyIiIiKSjOGRiIiIiCRjeCQi0jLVTS948wsiKg94qx4qtrS0NCQnJ0NPTw8A4OzsDGtray1XRa9TKpWQy/n3YXmk+rEsk8m0XAkRkSaGRyqWH3/8EZGRkTh16hR0dHTg5eUFT09PNGvWDEFBQahUqRJDSxkjCAIEQeAxKaNiYmLw+PFj5OXlwcbGBo0bN+YfY0RUpjE8kmQPHz6Eu7s7QkJCMHToUGRmZiImJgbx8fG4evUqatWqhYULF8LV1RWCIHDWREseP36MevXqoWvXrggODkaNGjXEx5RKJWQyGWQyGZKSkuDg4AAzMzMtVvvxevLkCYYPH464uDjk5eXB0dERJiYmsLa2RqtWrfD555/D2dmZ30talpeXh0ePHsHW1lbbpRCVGZyKIMnWrVuHatWqYebMmXByckLNmjUxYcIE7Nq1C2vWrMGdO3fQoUMHpKen85edFv3f//0frl+/jri4ONSqVQteXl6YN28e0tLSIJfLIZPJcOvWLfTs2RMPHjzQdrkfrSVLluDcuXP4448/8OjRI6xfvx7BwcGwtLTEunXrMGHCBGRkZPB7ScuWLVsGDw8PfPnll/jnn3+QlZWl0SczMxM7duxAbm6uFiokev8YHkkyXV1dPH36FJcvXwYAvHjxAjk5OQAAPz8//PLLL8jLy0NcXJw2y/zonT17FkOHDsXff/+NgwcPwt/fH0uXLoWjoyNatWqF9evX448//sB///tfVKlSRdvlfrR27NiBwYMHo0WLFgCAmjVr4j//+Q9++eUXRERE4MiRIxg4cKB2iyT89ttv8PLywtGjR9GqVSvUr18fYWFhOH/+PPLz8wG8/MM6PDwcurq6Wq6W6P1geCTJunfvDrlcjqVLl+LFixcwMDCAnp4elEolAMDT0xPW1ta4fv26liv9eGVnZ6NGjRpwcXGBk5MTmjZtioULF+Lo0aP4448/YG9vjy+//BKjR4/GxIkTtV3uRys3Nxc1atTA5s2b8fDhQwAvT4/m5+dDLpcjICAAy5cvx9WrV3H+/HktV/vxun//PvT09DBixAgcO3YM58+fR5cuXRAVFQVvb2+0bNkSq1atwooVK9C4cWNtl0v03nDNI0miWiu3efNmjBo1CpmZmejRowdGjBiBunXr4u7du9i3bx+GDRuGc+fOwcXFRdslf7Sys7Px8OFDODo6aly8lJubi927dyMoKAg3b95ExYoVtVjpx+3IkSPo168fevbsidDQUI2LZG7dugVPT08kJSXxOGnJ3bt3sX79etSoUQMBAQFie35+Pg4fPoyff/4ZmzdvRmZmJm7cuIFKlSppsVqi94fhkYolOzsb165dw/79+/HXX3/h4MGDkMlkqFixInJzc9GnTx/MmDFD22V+9O7evQs9Pb0Cr9qdOXMmIiMj8e+//2qhMgJeXgGfl5eHyMhIfP3118jPz8fnn3+OXr16wdnZGYmJidi6dSvOnTuHEydOaLvcj9rz588BAIaGhgVevDRu3Djs2bMHp06d0kZ5RFrB8Ehv9ODBA2zYsAHz5s2DtbU1rKysYGlpiUaNGqFu3brIysrCv//+i3bt2sHd3Z0L/LVEdZy+//572NjYwMzMDI6OjujUqROCgoJgaGgIpVKJNWvWwNHRER06dNB2yQQgPT0dUVFRiI6ORmJiIszNzWFgYIB69eph8uTJaNKkibZLpEK8ePEC3t7eCA4O5jIQ+qgwPNIbDRo0CGfOnEG7du1gYmKChw8f4urVq7h9+zacnZ0RHh4OLy8vbZf50Xv1OJmamuLhw4e4dOkSbt68CXd3d4wZMwY+Pj7aLvOj9/z5cxgaGqq1CYKA58+f4+nTpzh37hxMTEy4hk7LCjpOBfXZuHEjevXqJX5oAtHHgOGRiiQIAkxMTBATE4OWLVuKbVevXsU///yDNWvW4NGjR/j9999Rs2ZNLVf78SrsOF27dg3//PMPfvzxR2RkZGDjxo1q932k92/s2LFo1qwZ6tevD3t7e+jr62v0efz4MSwtLXmPRy2ScpzS09NhYWHx/osj0jJebU1FunjxIqpUqQJjY2OxTSaTwd3dHYMGDUJ8fDz09fXx+++/a7FKKuw4Va1aFcHBwYiPj4eOjg42bdqkxSopOjoaCxcuRM+ePeHn54fJkydj7969SEtLE+8RmJmZieDgYJw7d47BUUsKO0737t1DXl4eAODZs2fo378/r4anjxJnHqlIz58/R4cOHZCXl4eoqCi4uLho/EJbsGABoqOjubBfi3icyochQ4ZAT08P48aNw2+//YY1a9bg+vXrqFu3Lrp3747AwEAkJiZi2LBhvOG0FvE4ERWNM49UJENDQ8yaNQuZmZno168foqOjcffuXfEKxOzsbBw5cgQeHh5arvTjxuNU9uXl5aFKlSqwsLBAlSpV8M033yA5ORmJiYlo0KABvvvuO/j6+uI///kP+vXrp+1yP1o8TkRvxplHkuTcuXOYOXMm/v77b5iYmKB58+awt7fHrl27UKFCBaxZswa1a9fWdpkfPR6nsi09PR1paWnw8PBATk4OdHV11WaI161bh379+uH06dOoU6eOFiv9uPE4ERWN4ZGK5d69e9i2bRu2bNkCQ0ND1KxZE926dUP16tW1XRq9gsep/FAqlRAEAQqFAj/++CNGjRpV4Ocnk3bxOBH9D8Mjldjrn15CZROPU/mxYMEC5OfnY/z48douhYrA40QfO4ZHIqIyIjc3FwqFgmG/jONxoo8dwyMRERERScY/m4iIiIhIMoZHIiIiIpKM4ZGIiIiIJGN4JCIiIiLJGB6JiIiISDKGRyIiIiKSjOGRiIiIiCRjeCQiIiIiyRgeiYiIiEiy/wf3HWzD9wqeRQAAAABJRU5ErkJggg=="
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Run the circuit on C12 simulator\n",
"c12_groover_result = c12_simulator_backend_iswap.run(groover_circuit, shots=10000).result()\n",
"c12_groover_counts = c12_groover_result.get_counts()\n",
"\n",
"iswap = {}\n",
"for key, value in c12_groover_counts.items():\n",
" iswap[key.strip()] = value\n",
"\n",
"aer_groover_result = backend_aer.run(groover_circuit, shots=10000).result()\n",
"aer_groover_counts = aer_groover_result.get_counts()\n",
"\n",
"data = [iswap, aer_groover_counts]\n",
"plot_histogram(data, legend=['C12 emulator', 'Perfect emulator'], title=\"Groover algorithm simulators comparison\", figsize=(5,5))"
]
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.13"
}
},
"nbformat": 4,
"nbformat_minor": 4
}